/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Save
 */
@Entity
@Table(name = "benutzer")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Benutzer.findAll", query = "SELECT b FROM Benutzer b"),
    @NamedQuery(name = "Benutzer.findByBenutzerid", query = "SELECT b FROM Benutzer b WHERE b.benutzerid = :benutzerid"),
    @NamedQuery(name = "Benutzer.findByEmail", query = "SELECT b FROM Benutzer b WHERE b.email = :email"),
    @NamedQuery(name = "Benutzer.findByPasswort", query = "SELECT b FROM Benutzer b WHERE b.passwort = :passwort"),
    @NamedQuery(name = "Benutzer.findByVorname", query = "SELECT b FROM Benutzer b WHERE b.vorname = :vorname"),
    @NamedQuery(name = "Benutzer.findByNachname", query = "SELECT b FROM Benutzer b WHERE b.nachname = :nachname"),
    @NamedQuery(name = "Benutzer.findByGeburtsdatum", query = "SELECT b FROM Benutzer b WHERE b.geburtsdatum = :geburtsdatum"),
    @NamedQuery(name = "Benutzer.findByStrasse", query = "SELECT b FROM Benutzer b WHERE b.strasse = :strasse"),
    @NamedQuery(name = "Benutzer.findByHausnummer", query = "SELECT b FROM Benutzer b WHERE b.hausnummer = :hausnummer"),
    @NamedQuery(name = "Benutzer.findByPostleitzahl", query = "SELECT b FROM Benutzer b WHERE b.postleitzahl = :postleitzahl"),
    @NamedQuery(name = "Benutzer.findByOrt", query = "SELECT b FROM Benutzer b WHERE b.ort = :ort"),
    @NamedQuery(name = "Benutzer.findByRolle", query = "SELECT b FROM Benutzer b WHERE b.rolle = :rolle")})
public class Benutzer implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Benutzer_id")
    private Integer benutzerid;
    @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Email")
    private String email;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Passwort")
    private String passwort;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Vorname")
    private String vorname;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Nachname")
    private String nachname;
    @Basic(optional = false)
    @NotNull
    @Column(name = "Geburtsdatum")
    @Temporal(TemporalType.DATE)
    @Past
    private Date geburtsdatum;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Strasse")
    private String strasse;
    @Basic(optional = false)
    @NotNull
    @Column(name = "Hausnummer")
    private String hausnummer;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 5)
    @Column(name = "Postleitzahl")
    private String postleitzahl;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Ort")
    private String ort;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "Rolle")
    private String rolle;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "benutzerid")
    private Collection<Gebot> gebotCollection;

    public Benutzer() {
    }

    public Benutzer(Integer benutzerid) {
        this.benutzerid = benutzerid;
    }

    public Benutzer(Integer benutzerid, String email, String passwort, String vorname, String nachname, Date geburtsdatum, String strasse, String hausnummer, String postleitzahl, String ort, String rolle) {
        this.benutzerid = benutzerid;
        this.email = email;
        this.passwort = passwort;
        this.vorname = vorname;
        this.nachname = nachname;
        this.geburtsdatum = geburtsdatum;
        this.strasse = strasse;
        this.hausnummer = hausnummer;
        this.postleitzahl = postleitzahl;
        this.ort = ort;
        this.rolle = rolle;
    }

    public Integer getBenutzerid() {
        return benutzerid;
    }

    public void setBenutzerid(Integer benutzerid) {
        this.benutzerid = benutzerid;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPasswort() {
        return passwort;
    }

    public void setPasswort(String passwort) {
        this.passwort = passwort;
    }

    public String getVorname() {
        return vorname;
    }

    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    public String getNachname() {
        return nachname;
    }

    public void setNachname(String nachname) {
        this.nachname = nachname;
    }

    public Date getGeburtsdatum() {
        return geburtsdatum;
    }

    public void setGeburtsdatum(Date geburtsdatum) {
        this.geburtsdatum = geburtsdatum;
    }

    public String getStrasse() {
        return strasse;
    }

    public void setStrasse(String strasse) {
        this.strasse = strasse;
    }

    public String getHausnummer() {
        return hausnummer;
    }

    public void setHausnummer(String hausnummer) {
        this.hausnummer = hausnummer;
    }

    public String getPostleitzahl() {
        return postleitzahl;
    }

    public void setPostleitzahl(String postleitzahl) {
        this.postleitzahl = postleitzahl;
    }

    public String getOrt() {
        return ort;
    }

    public void setOrt(String ort) {
        this.ort = ort;
    }

    public String getRolle() {
        return rolle;
    }

    public void setRolle(String rolle) {
        this.rolle = rolle;
    }

    @XmlTransient
    public Collection<Gebot> getGebotCollection() {
        return gebotCollection;
    }

    public void setGebotCollection(Collection<Gebot> gebotCollection) {
        this.gebotCollection = gebotCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (benutzerid != null ? benutzerid.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Benutzer)) {
            return false;
        }
        Benutzer other = (Benutzer) object;
        if ((this.benutzerid == null && other.benutzerid != null) || (this.benutzerid != null && !this.benutzerid.equals(other.benutzerid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "beans.Benutzer[ benutzerid=" + benutzerid + " ]";
    }
    
}
